# @Time : 2020/6/28 10:10
# @Author : Fioman 
# @Phone : 13149920693

# 装饰器的一个关键特性就是,他们在被装饰的函数定义之后立即运行.这通常是在导入时(即python加载模块时)

registry = []

def register(func):
    print("running register({})".format(func))
    registry.append(func)
    return func


@register
def f1():
    print("running f1()")

@register
def f2():
    print("running f2()")

@register
def f3():
    print("running f3()")

def main():
    print("running main()")
    print("registry -> ",registry)
    f1()
    f2()
    f3()

if __name__ == '__main__':
    main()


# 函数装饰器在导入模块时立即执行,而被装饰的函数只在明确调用的时候才运行.
# 1> 装饰器函数与被装饰的函数再同一个模块中定义.实际情况是,装饰器通常在一个模块中定义,然后应用到其他模块中的函数中.
# 2> register 装饰器返回的函数与通过参数传入的相同.实际上,大多数装饰器会在内部定义一个函数,然后将其返回.

